/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import Nivel.CadastroNivel;
import Nivel.Nivel;
import Nivel.NivelNaoCadastradoException;
import Nivel.RepositorioNivel;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorNivel {
    
    private RepositorioNivel objRepositorioNivel = null;

    public ControladorNivel(RepositorioNivel objRepositorioNivel) {
        this.objRepositorioNivel = objRepositorioNivel;
    }
    
    /**
     * 
     * 
     * @param objNivel
     * @throws ErroAcessoRepositorioException
     * @throws CamposObrigatoriosException 
     */
    public void cadastrar(Nivel objNivel) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Casts 
        boolean statusNivel = (boolean) objNivel.getStatusNivel();
        
        // Válidações
        if(objNivel.getDescricaoNivel().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Nivel");
        
        // Setando os valores
        objNivel.setStatusNivel(statusNivel);
        
        objCadastroNivel.cadastrarAtualizar(objNivel);
    }
    
    public void atualizar(Nivel objNivel) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Casts 
        int idNivel = (int) objNivel.getIdNivel();
        boolean statusNivel = (boolean) objNivel.getStatusNivel();
        
        // Válidações
        if(idNivel == 0) throw new CamposObrigatoriosException("Identificador Nivel");
        if(objNivel.getDescricaoNivel().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Nivel");
        
        // Setando os valores
        objNivel.setIdNivel(idNivel);
        objNivel.setStatusNivel(statusNivel);
        
        // Atualizando na base
        objCadastroNivel.cadastrarAtualizar(objNivel);
    }
    
    public Nivel procurar(int idNivel) throws NivelNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Casts 
        idNivel = (int) idNivel;
        
        // Validações
        if(idNivel == 0) throw new CamposObrigatoriosException("Identificador do Nivel");
                
        // Atualizando na base
        return objCadastroNivel.procurar(idNivel);
    }
    
    public boolean existe(int idNivel) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Casts 
        idNivel = (int) idNivel;
        
        // Validações
        if(idNivel == 0) throw new CamposObrigatoriosException("Identificador do Nivel");
                
        // Atualizando na base
        return objCadastroNivel.existe(idNivel);
    }
    
    public List<Nivel> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Atualizando na base
        return objCadastroNivel.listar(strComplemento);
    }
    
    public void remover(int idNivel) throws NivelNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
         
        // Casts 
        idNivel = (int) idNivel;
        
        // Validações
        if(idNivel == 0) throw new CamposObrigatoriosException("Identificador do Nivel");
        
        // Atualizando na base
        objCadastroNivel.remover(idNivel);
    }
    
    public List<Nivel> listarAtivos() throws Exception, ErroAcessoRepositorioException{
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        // Atualizando na base
        return objCadastroNivel.listarAtivos();
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<Nivel> procurarPorDescricaoPorSubSetor(String descricaoNivel, int idSubSetor) throws Exception, ErroAcessoRepositorioException {
        CadastroNivel objCadastroNivel = new CadastroNivel(this.objRepositorioNivel);
        
        if(descricaoNivel.trim().length() == 0 && idSubSetor == 0) throw new CamposObrigatoriosException("Descrição Nivel ou Setor");
        
        // Atualizando na base
        return objCadastroNivel.procurarPorDescricaoPorSubSetor(descricaoNivel, idSubSetor);        
    }
}